#include<stdio.h>
char num1[1100]={'0'};//存放第一个数
char num2[1100]={'0'};//存放第二个数
char new1[1100]={'0'};//存放后来的较大数
char new2[1100]={'0'};//存放后来的较小数
char ret[1100]={'0'};//存放结果
int my_add(char*new1,char*new2,int former,int place)
//要相加的位的地址、上一位进的数值、此次计算的位数的数组下标
//返回值是为了可控地结束递归
{
    int sum = (*new1-'0'+*new2-'0'+former);//字符数字减去字符'0'得到该数字
    //找到[0]结束
    if(place==0)
    {
        ret[place]=(sum+'0');//数字加上字符'0'的到该数字的字符
        return 0;
    }
    //小于10正常操作
    if(sum<10)
    {
        ret[place]=(sum+'0');
        return my_add(new1-1,new2-1,0,place-1);//向前移一位，进位数为0
    }
    //大于10除以10，商为进位数，余数为留下的数
    else
    {
        int count10 = sum/10;
        ret[place]=(sum%10+'0');//余数为留下的数
        return my_add(new1-1,new2-1,count10,place-1);//向前移一位，商为进位数
    }
}
int main()
{
    //初始化空间
    int k = 0;
    for(k=0;k<1100;k++)
    {
        num1[k]='0';
        num2[k]='0';
        new1[k]='0';//存放后来的较大数
        new2[k]='0';//存放后来的较小数
        ret[k]='0';
    }
    //按顺序存入并记录两个数字各自位数
    //后注：写的时候没学过string的用法，看同学好像是可行的，输入速度有很大优化空间
    int count1 = 0;//位数1
    while(1)
    {
        if((num1[count1]=getchar())==' ')
        {
            break;
        }
        count1++;
    }
    int count2 = 0;//位数2
    while(1)
    {
        if((num2[count2]=getchar())=='\n')
        {
            break;
        }
        count2++;
    }
    //位数向多的靠齐，计算位数差值differ
    int differ = count1-count2;//可能为负数，需要后续判断
    int wei = 0;
    int smallwei = 0;
    int flag = 0;//记录哪个位数更少,0第二个少，1第一个少
    if(differ>=0)
    {
        wei = count1;
        smallwei = count2;
    }
    else
    {
        differ = -differ;
        wei = count2;
        smallwei = count1;
        flag = 1;
    }
    //在新数组前放differ+1个0以对齐，位数多的也要在新数组前放一个0（在最前面各多一位防止最高位进位没空间）
    int i = 0;
    int j = 0;
    for(i=differ+1,j=0;i<differ+smallwei+1;i++,j++)
    //输入较小数到new2数组（+differ向右和较长数对齐，+1留出第一个位置，循环次数为自己的位数）
    {
        if(flag)
        {
            new2[i]=num1[j];
        }
        else
        {
            new2[i]=num2[j];
        }
    }
    for(i=1,j=0;i<1+wei;i++,j++)
    //输入较大数到new1数组，空出第一位，循环次数为自己的位数
    {
        if(flag)
        {
            new1[i]=num2[j];
        }
        else
        {
            new1[i]=num1[j];
        }
    }
    //通过位数找到个位，从后往前一个个位相加（包括加上之前的进位）
    int meiyong = my_add(&new1[wei],&new2[wei],0,wei);//这里传的是个位，进位数传0
    //打印结果数组
    j=0;
    if(ret[0]=='0')//如果第一个是0就不打印
    {
        j=1;
    }
    for(i=j;i<wei+1;i++)
    {
        printf("%c",ret[i]);
    }
    return 0;
}